package ru.emms.codemeter.forms;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.ui.ApplicationFrame;

import javax.swing.*;
import java.awt.*;
import java.util.Map;

/**
 * Created by IntelliJ IDEA.
 * User: sasha.vin
 * Date: 10.08.2010
 * Time: 16:35:52
 * Рисование графика с секторами
 */
public class PieChartGraphic
    extends ApplicationFrame {

    private DefaultPieDataset dataset = new DefaultPieDataset();
    private JFreeChart chart;

    public PieChartGraphic() {
        super("");
    }


    /**
     * создает область для рисиования графика
     *
     * @return панель, где будет производится прорисовка
     */
    public JPanel createGraphicSpace() {
        chart = ChartFactory.createPieChart("График", dataset, true, true, false);
        chart.setBackgroundPaint(Color.white);
        ChartPanel chartPanel = new ChartPanel(chart);
        PiePlot plot = (PiePlot) chart.getPlot();
        plot.setLabelFont(new Font("SansSerif", Font.PLAIN, 12));
        plot.setNoDataMessage("No data available");
        plot.setCircular(false);
        plot.setLabelGap(0.02);
        return chartPanel;
    }

    /**
     * рисует график с секторами
     *
     * @param metrics список пар имя метрики - значением
     */
    public void createGraphic(Map<String, Long> metrics) {
        dataset.clear();
        Long countAllMetrics = 0L;
        for (String metricName : metrics.keySet()) {
            countAllMetrics += metrics.get(metricName);
        }
        for (String metricName : metrics.keySet()) {
            dataset.setValue(metricName + "=" + metrics.get(metricName).toString(), (double) metrics.get(metricName) / countAllMetrics * 100);
        }
    }

    public JFreeChart getChart() {
        return chart;
    }

    public void setGraphicName(String name) {
        chart.setTitle(name);
    }

}
